package com.shujia.opt

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

/**
 * 当资源充足的情况下，可以适当的使用重分区算子，扩大分区数
 * 当资源不足的情况下，可以适当的减少分区数
 *
 * 分区数会影响rdd的并行任务数
 */
object Demo5Coalesce2 {
  def main(args: Array[String]): Unit = {
    //repartition:coalesce(numPartitions，true) 增多分区使用这个
    //coalesce(numPartitions，false) 减少分区 没有shuffle只是合并 partition
    val conf: SparkConf = new SparkConf()
      .setMaster("local")
      .setAppName("重分区")
    val sc = new SparkContext(conf)

    val lineRDD: RDD[String] = sc.textFile("spark/data/test1/*")
    println(s"lineRDD的分区数：${lineRDD.getNumPartitions}")

    /**
     * Coalesce算子通常是用在合并小文件时候使用
     * 对应的spark core中的话，通常使用该算子进行合并分区
     */
    val lineRDD2: RDD[String] = lineRDD.coalesce(1)
    lineRDD2.foreach(println)



  }
}
